#ifndef __CPUHC32F460_H
#define __CPUHC32F460_H

//#if ( (CPU_TYPE == CPU_HC32F460) )

#include <stdio.h>
#include "hc32f460.h"

#include "hc32_ll_tmra.h"
#include "hc32_ll_gpio.h"
//#include "hc32f460_gpio.h"
//-----------------------------------------------
//				宏定义
//-----------------------------------------------    
/**********************************************系统定义********************************************************/
#define CLEAR_WATCH_DOG					//WDT_RefreshCounter()               //HT_WDT->WDTSET = 0xAA3F//
#define ENABLE_CPU_INT					__enable_irq()                     
#define DISABLE_CPU_INT					__disable_irq()  

#define	NOP()				            __NOP() 
#define Reset_CPU()			            NVIC_SystemReset()
                                                                           
#define NVIC_PriorityGroup_0            0x07                               /*!< 0 bits for pre-emption priority
                                                                                          4 bits for subpriority */
#define NVIC_PriorityGroup_1            0x06                               /*!< 1 bits for pre-emption priority
                                                                                          3 bits for subpriority */
#define NVIC_PriorityGroup_2            0x05                               /*!< 2 bits for pre-emption priority
                                                                                          2 bits for subpriority */
#define NVIC_PriorityGroup_3            0x04                               /*!< 3 bits for pre-emption priority
                                                                                          1 bits for subpriority */
#define NVIC_PriorityGroup_4            0x03                               /*!< 4 bits for pre-emption priority
                                                                                          0 bits for subpriority */
#define PULLHIGH			            1
#define PULLLOW				            0
#define PULLNONE			            0xFF
#define AF_GPIOFUNC			            0xFFFF




/**********************************************常量定义********************************************************/
#define HIGH	                    1
#define LOW		                    0
#define GPIO_DEFAULT		        0xFF
/**********************************************ADC定义********************************************************/


/**********************************************定时器定义******************************************************/

/**********************************************中断定义********************************************************/
//#define USART_CR1_TCIE                  0x00000040 
//#define USART_CR1_TXEIE                 0x00000080
 
#define HIGH_PREEMPTION_PRIORITY	    0
#define LOW_PREEMPTION_PRIORITY		    1
                                                                                             
#define DISABLE_CLOCK_INT				;                                   //禁止实时时钟中断（注意不是禁止实时时钟）                                                                          
#define ENABLE_CLOCK_INT				;                                   //允许实时时钟中断                                                                                                                                                       
#define DISABLE_SYSTICK_INT			    ;                                   //禁止中断                                                                                
#define ENABLE_SYSTICK_INT				;                                   //允许中断
                                                                                            
/**********************************************串口定义********************************************************/
#define R_485           GPIO_ResetPins(GPIO_PORT_H,GPIO_PIN_02)        //告警灯,红灯
#define T_485           GPIO_SetPins(GPIO_PORT_H,GPIO_PIN_02)
#define G_485           GPIO_ReadOutputPins(GPIO_PORT_H,GPIO_PIN_02)
/**********************************************ee2定义********************************************************/


 /**********************************************定时器定义********************************************************/                                                                                           

                                                                                            
/**********************************************IO定义*********************************************************/


/**********************************************SPI定义********************************************************/
        

/**********************************************IIC定义********************************************************/
                                                                                            




//-----------------------------------------------
//				枚举
//-----------------------------------------------  
typedef enum
{
    eCR                  =0     ,		                             //载波
	eRS485_I                    ,	                                 //第一路485
    eBlueTooth                  ,		                             //蓝牙

}eSERIAL_TYPE;

typedef enum
{
    ePT_HPLC            =0      ,	                                 //串口（载波）
	ePT_4851                    ,                                    //4851（维护用）
	ePT_BLUETOOTH               ,	                                 //蓝牙
}ePORT_TYPE;

typedef enum
{
	timerA1_IrqNo        = INT001_IRQn ,
	timerA2_IrqNo        = INT002_IRQn ,
                                       
	Uart1Rcv_IrqNo       = INT003_IRQn ,
	Uart1Snd_IrqNo       = INT004_IRQn ,
	Uart1Snd_Cmplt_IrqNo = INT005_IRQn ,
	Uart1_Irq_Err_No     = INT006_IRQn ,
	Uart2Rcv_IrqNo       = INT007_IRQn ,
	Uart2Snd_IrqNo       = INT008_IRQn ,
	Uart2_Irq_Err_No     = INT009_IRQn ,
	Uart2Snd_Cmplt_IrqNo = INT010_IRQn ,
	Uart3Rcv_IrqNo       = INT011_IRQn ,
	Uart3Snd_IrqNo       = INT012_IRQn ,
	Uart3_Irq_Err_No     = INT013_IRQn ,
	Uart3Snd_Cmplt_IrqNo = INT014_IRQn ,
	Uart4Rcv_IrqNo       = INT015_IRQn ,
	Uart4Snd_IrqNo       = INT016_IRQn ,
	Uart4_Irq_Err_No     = INT017_IRQn ,
	Uart4Snd_Cmplt_IrqNo = INT018_IRQn ,
    HDDY_IrqNo           = INT025_IRQn, //后端电压检测	
    Dma_Irp_No           = INT028_IRQn,
	SF_0_IrqNo           = INT030_IRQn,
	SF_1_IrqNo           = INT031_IRQn,
} IRQNUM;

typedef enum
{
	eSPI_MODE_0          = 0           ,                                     //SPI模式 0 1 2 3
	eSPI_MODE_1          = 1           , 
	eSPI_MODE_2          = 2           ,
	eSPI_MODE_3          = 3           , 
}eSPI_MODE;

typedef enum
{
	OPEN                 = 0           ,
	CLOSE                              ,
	TOGGLE                             ,
}eGpioCtl;

//指示灯控制枚举
typedef enum
{
	eLCD_UP                            ,
	eLCD_DOWN                            ,
} ElCDCONTROL                          ;


//-----------------------------------------------
//				结构体
//-----------------------------------------------  

typedef struct port_init
{
	uint16_t    enPort         ; 
	uint16_t            u16Pin         ;
	uint8_t             FuncReg        ;
    stc_gpio_init_t     GpioReg        ;
}port_init_t;

typedef struct
{
	uint8_t SerialType                         ;                              //串口类型 0: 485_I 1:BLE 2:CR 3:485_II
	uint8_t SCI_Ph_Num                         ;						       // 物理串口号
	uint8_t (*SCIInit)( uint8_t SCI_Ph_Num )      ;		                       // 初始化串口
	uint8_t (*SCIEnableRcv)( uint8_t SCI_Ph_Num ) ;		                       // 允许接收  
	uint8_t (*SCIDisableRcv)( uint8_t SCI_Ph_Num );		                       // 禁止接收接收
	uint8_t (*SCIEnableSend)( uint8_t SCI_Ph_Num );		                       // 允许发送
	uint8_t (*SCIBeginSend)( uint8_t SCI_Ph_Num ) ;		                       // 开始发送
}TypeDef_Pulic_SCI;

typedef struct
{
	uint32_t            addr            ;
	char                *name          ;
	uint32_t            rst             ;
	uint32_t            set             ;       
	uint16_t            ee_addr         ;	                                 //校表寄存器存在EE中（注意仅限校表参数）
	uint8_t             len             ;		                             //有效长度
}TSetVolate;   


//typedef struct
//{
//	en_port_t           Port            ;
//	en_pin_t            Pin             ;
//	en_port_func_t      IoFunc_x        ;
//} MCU_IO;
//
//typedef struct
//{
//	MCU_IO              IO              ;
//	en_pin_mode_t       MODE            ;
//} SYS_IO_Config;


//typedef struct
//{
//	SYS_IO_Config       IOConfig[2]             ;
//	M4_USART_TypeDef    *USART_CH               ;
//                                                
//	IRQn_Type           USART_Rcv_IRQn          ;
//	func_ptr_t          UsartRcvIrqCallback     ;
//	uint16_t            USART_Rcv_NUM           ;
//                                                
//	IRQn_Type           USART_Err_IRQn          ;
//	func_ptr_t          UsartErrIrqCallback     ;
//	uint16_t            USART_Err_NUM           ;
//                                                
//	IRQn_Type           USART_Snd_IRQn          ;
//	func_ptr_t          UsartSndIrqCallback     ;
//	uint16_t            USART_Snd_NUM           ;
//                                                
//	IRQn_Type           USART_Snd_Cmplt_IRQn    ;
//	func_ptr_t          UsartSndCmpltIrqCallback;
//	uint16_t            USART_Snd_Cmplt_NUM     ;
//} SYS_UART_Config;



//-----------------------------------------------
//				变量声明
//-----------------------------------------------

extern void InitGPIO(port_init_t *TGPIOALL_Config, int GPIOSize);

#endif//#if ( (CPU_TYPE == CPU_HC32F460) )

